package demo27;

import java.util.concurrent.TimeUnit;

/**
 * ThreadLocal线程局部变量
 * ThreadLocal是使用空间换时间，synchronized是使用时间换空间比如在hibernate中session就存在与ThreadLocal中，避免synchronized的使用
 * 线程局部变量属于每个线程都有自己的，线程间不共享，互不影响
 * 运行下面的程序，理解ThreadLocal
 */
public class T {

    static ThreadLocal<Person> tl = new ThreadLocal<>();

    public static void main(String[] args) {
        new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(tl.get());
        }).start();

        new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            tl.set(new Person());
        }).start();
    }

}

class Person{
    private String name = "kevin";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
